<?php

class Datetools {


    public static function invert($date, $check = FALSE) {
        if ($check) if (!self::check($date)) return FALSE;

        if (strpos($date, '-')) {
            return self::amd_dma($date);
        } elseif(strpos($date, '/')) {
            return self::amd_dma($date);
        }
    }
    
    public static function invertDH($datetime, $check = FALSE) {
        if ($check) if (!self::check($datetime)) return FALSE;
        
        $datetime = explode(' ', $datetime);
        
        $date = $datetime[0];
        $time = $datetime[1];
        
        if (strpos($date, '-')) {
            return self::amd_dma($date).' '.$time;
        } elseif(strpos($date, '/')) {
            return self::amd_dma($date).' '.$time;
        }
    }
    
    public static function invertDH_D($datetime, $check = FALSE) {
        if ($check) if (!self::check($datetime)) return FALSE;
        
        $datetime = explode(' ', $datetime);
        
        $date = $datetime[0];
        $time = $datetime[1];
        
        if (strpos($date, '-')) {
            return self::amd_dma($date);
        } elseif(strpos($date, '/')) {
            return self::amd_dma($date);
        }
    }
    

    /**
     * Verifica se a data esta vazia,
     * se o tamanho e 10
     * e se e uma data validate http://php.net/checkdate
     *
     * @param string $date
     */
    public static function check($date) {
        if (!empty($date)) {
            if (strlen($date) == 10) {
                if (strpos($date, '-')) {
                    list($aaaa, $mm, $dd) = explode('-', $date);
                    return checkdate($mm, $dd, $aaaa);
                } elseif(strpos($date, '/')) {
                    list($dd, $mm, $aaaa) = explode('/', $date);
                    return checkdate($mm, $dd, $aaaa);
                }
            }
        }
        return FALSE;
    }

    /**
     * Converte a data de aaaa-mm-dd para dd/mm/aaaa
     *
     * @param string $date
     */
    public static function amd_dma($date) {
        if (empty($date)) return FALSE;
        list($aaaa, $mm, $dd) = explode('-', $date);
        return "$dd/$mm/$aaaa";
    }

    /**
     * Converte a data de dd/mm/aaaa para aaaa-mm-dd
     *
     * @param string $date
     */
    public static function dma_amd($date) {
       
        if (strpos($date, '/') === FALSE ) return FALSE;
        
        if (empty($date)) return FALSE;
        list($dd, $mm, $aaaa) = explode('/', $date);
        return "$aaaa-$mm-$dd";
    }
    
    public static function mda_amd($date) {
       
        if (strpos($date, '/') === FALSE ) return FALSE;
        
        if (empty($date)) return FALSE;
        list($mm,$dd, $aaaa) = explode('/', $date);
        return "$aaaa-$mm-$dd";
    }

    /**
     * Mostra a a data no formato => Segunda, 31 de janeiro de 2011
     *
     * @param string $date
     */
    public static function literal($date){
    	$dia = array(0=>'Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado');
    	$meses = array(1=>'janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro');

    	if (!empty($date)) {
            if (strlen($date) == 10) {
                if (strpos($date, '-')) {
                    list($aaaa, $mm, $dd) = explode('-', $date);
                } elseif(strpos($date, '/')) {
                    list($dd, $mm, $aaaa) = explode('/', $date);
                }
                $mm = (int) $mm;
                $d = (int) date('w', strtotime($date));

                return "{$dia[$d]}, $dd de {$meses[$mm]} de $aaaa";
            }
        }
        return FALSE;

    }
    
    public static function amd_ma($date) {
        if (empty($date)) return FALSE;
        list($aaaa, $mm, $dd) = explode('-', $date);
        return "$mm/$aaaa";
    }
    
    public static function amd_Mesa($date) {
        if (empty($date)) return FALSE;
        list($aaaa, $mm, $dd) = explode('-', $date);
        return self::num_Mes($mm)."/$aaaa";
    }
    
    public static function num_Mes($mes) {
        $retorno = "";
        switch ($mes) {
            case "01": $retorno = "Jan"; break;
            case "02": $retorno = "Fev"; break;
            case "03": $retorno = "Mar"; break;
            case "04": $retorno = "Abr"; break;
            case "05": $retorno = "Mai"; break;
            case "06": $retorno = "Jun"; break;
            case "07": $retorno = "Jul"; break;
            case "08": $retorno = "Ago"; break;
            case "09": $retorno = "Set"; break;
            case "10": $retorno = "Out"; break;
            case "11": $retorno = "Nov"; break;
            case "12": $retorno = "Dec"; break;
        }
        
        return $retorno;
    }
    public static function texto_Mes($mes) {
    
        $meses = array(1=>'janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro');
    
        return $meses[(int)$mes];
    }
    
    public static function semana($sem = null,$tipo = 1){
    	
        if($tipo == 1) $semana = array('0'=>'Domingo','1'=>'Segunda-Feira','2'=>'Terça-Feira','3'=>'Quarta-Feira','4'=>'Quinta-Feira','5'=>'Sexta-Feira','6'=>'Sábado');
    	else if($tipo == 2) $semana = array('0'=>'Domingo','1'=>'Segunda','2'=>'Terça','3'=>'Quarta','4'=>'Quinta','5'=>'Sexta','6'=>'Sábado');
    	
        if($sem == null) return $semana;
        else return $semana[$sem];
    }
    
    public static function hora_hm($hora){
        return substr($hora, 0,-3);
    }
    
    public static function diasemanaData($data){
        
        $ano =  substr($data, 0, 4);
	$mes =  substr($data, 5, -3);
	$dia =  substr($data, 8, 9);

	return $diasemana = date("w", mktime(0,0,0,$mes,$dia,$ano) );
    }
    
    public static function diasemanaTextoIng($txt_sem_ing){
        
        $pos_arr = array(
           'Sun' => 0,
           'Mon' => 1,
           'Tue' => 2,
           'Wed' => 3,
           'Thu' => 4,
           'Fri' => 5,
           'Sat' => 6,
        ); 

        return $pos_arr[$txt_sem_ing];
    }
    
    

}
?>